پروژه آماده / SQL Server
نوشته شده توسط : مطلب پروژه

خانه /
SQL Server
سامانه مدیریت پروژه ها

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com


معرفی سامانه مدیریت پروژه های اداره کل راهداری خراسان جنوبی. این سامانه توسط گروه برنامه نویسی پی سی پروژه در بهمن ماه ۱۳۹۶ تحلیل و طراحی شده و از زبان برنامه نویسی C#بر پایه ASP.Net و فریمورک bootstrap برای طراحی سمت کلاینت (front-end) استفاده شده. این سامانه دارای چهار نوع کاربری مدیر کل: تعیین سطح دسترسی ها و مدیریت کاربران. ... ادامه مطلب »
سامانه فاکتور آنلاین



درود دوستان در خدمتتون هستیم با یکی دیگه از محصولات جدیدمون با عنوان سامانه تحت وب فاکتور آنلاین این سامانه با هدف ارائه خدمات حسابداری و انبارداری آنلاین توسط پی سی پروژه طراحی و از فروردین ماه سال ۱۳۹۶ با همکاری اهر نت  بصورت رسمی شروع به کار کرد و شما عزیزان میتونین با عضویت در این سامانه از امکانات ... ادامه مطلب »
مجموعه آموزشی بانک اطلاعاتی SQL Server از مبتدی تا پیشرفته



با سلام خدمت شما کاربران پی سی پروژه در خدمتتون هستیم با یک مجموعه آموزشی دیگر در زمینه پایگاه داده یا بانک اطلاعاتی توی آموزش های قبلی بیشتر به مباحث برنامه نویسی پرداختیم اما غافل از این که بانک اطلاعاتی از اهمیت بسیار بسیار زیادی برخورداره. تا این حد که بنا به تجربه کاری خودم میگم اصل یه پروژه یا ... ادامه مطلب »
نرم افزار انبارداری پارس



با سلام خدمت کاربران گرامی. همانطور که در پست قبل گفته بودیم یک نرم افزار انبارداری که توسط تیم برنامه نویسی وبسایت طراحی و تولید شده است را در اختیارتان قرار می دهیم. امکانات نرم افزار: تعریف انبار، تعریف کالا، ورود اطلاعات از فایل اکسل، حواله های ورودی و خروجی، فاکتور خرید و فروش، گارانتی و تعمیر کالاهای فروخته شده، ... ادامه مطلب »
دانلود پروژه صندوق بیمه محصولات کشاورزی به زبان سی شارپ

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com

دانلود پروژه صندوق بیمه محصولات کشاورزی   توضیحاتی در مورد نرم افزار: نرم افزار صندوق بیمه محصولات کشاورزی با زبان برنامه نویسی C# و با استفاده از تکنولوژی ADO.NET نوشته شده است که در این قسمت به شرح آن می پردازیم. الف) بخش اطلاعات پایه: قسمتی که لازم است اطلاعات اولیه ی نرم افزار وارد شود و در سایر قسمت ... ادامه مطلب »

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com

دریافت داده یکی از پر کاربردترین کارهای برنامه نویسان می باشد، شاید بتوان گفت "برنامه نویسی چیزی به جز بازی با داده ها نیست" و بنده کاملا به این جمله معتقدم ؛ زیرا اگر به نرم افزارهای اطراف خود به دقت توجه نمایید ، متوجه این نکته می شوید که همه نرم افزارها کاری به جز بازی با داده انجام نمی دهند، از این رو عملیات CRUD بین برنامه نویسان بسیار گفته می شود ، به طوری که اگر به صحبت های چند برنامه نویس گوش کنید احتمال شنیدن عبارت CRUD در بین جملات آنها بسیار زیاد می باشد...
CRUD چهار عمل اصلی است که روی داده ها انجام می شود و شامل CREATE ، READ (Retrieve) ، UPDATE و DELETE می باشد ، در نهایت بقیه کاری که در نرم افزارها ممکن است انجام شود،  عملیات های محاسباتی می باشد.
Entity Framework یک پترن بسیار جذاب برای برنامه نویسان می باشد که با بررسی دقیق آن متوجه می شویم که Context آن نوعی پترن با نام Unit Of Work می باشد. (برای اطلاعات بیشتر درباره این پترن بسیار جذاب می توانید به اینجا مراجعه نمایید)
در ادامه در این پست آموزشی درباره عملیات READ صحبت خواهیم نمود و دریافت اطلاعات از منبع داده (دیتابیس) با کمک Entity Framework را بررسی خواهیم نمود.

در Entity Framework توابعی برای دریافت اطلاعات وجود دارند که عبارتند از:
First - FirstOrDefault - Single - SingleOrDefault - Find - ToList

اولین نکته ای که می توان درمورد توابع فوق بیان نمود این است که اجرای این دستورات موجب اجرا یک کد SQL روی دیتابیس می شود و در نتیجه خروجی این توابع داده می باشد.
من به شخصه دوست دارم اسم این توابع را توابع اجرایی بنامم ، زیرا این توابع موجب اتصال به دیتابیس و اجرای یک کد SQL روی آن و دریافت اطلاعات از دیتابیس می شوند.
در توضیح بیشتر باید بیان نمایم که خروجی تمامی توابع Entity Framework الزاما داده نیست و بسیاری از توابع خروجی از نوع IQueryable می باشد ، IQueryable در اصل دستور SQL می باشد و بنابراین داده نیست و برای تبدیل شده به داده می بایست بوسیله یکی از توابع فوق روی دیتابیس اجرا شوند.
شاید بپرسید "خوب ، خروجی IQueryable به چه درد ما می خوره ؟"
در جواب باید خدمتتون عرض کنم که این نوع خروجی یکی از جاذبه های Entity Framework می باشد ، بطوری که شما می توانید چندین خروجی را با هم ادغام نمایید
به تکه کد زیر توجه نمایید :

var db = new MyDBContext();

var query1 = db.Employees.Where(c => c.Name == "Hamid Reza");

var query2 = query1.Where(c => c.Family == "Moradof");

var query3 = query2.OrderByDescending(c => c.ID);
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
var data1 = query3.ToList();

در خط اول تکه کد بالا  از کانتکس Entity Framework یک شیء ایجاد کرده ایم.

در ادامه ملاحظه می نمایید که درون query1 و query2 و query3 داده ای وجود ندارد و همه آنها حاوی دستور SQL می باشند (نوع این اشیاء IQueryable است)

خاصیت جالب اشیاء IQueryable این است که می توانید روی آنها شرط جدیدی بگذارید و در نتیجه شیء جدیدی از نوع IQueryable ایجاد نمایید ، بدون اینکه سرباری روی سرور داشته باشید (تا وقتی روی اشیاء IQueryable کار می کنید و از توابع اجرایی بیان شده در ابتدای این مقاله استفاده نمی نمایید ، هیچ اتصالی به دیتبایس انجام نمی شود و در نتیجه هیچ سرباری روی سرور نخواهید داشت)

به شخصه بیشترین استفاده ای که از IQueryable کرده ام ، ایجاد کوئری های پویا در جستجوی های پیشرفته بوده است ، بصورتی که شما می توانید بصورت پویا بر اساس پر بودن فیلدهای فرم جستجویتان به کررات شرط هایی به شیء IQueryable تان اضافه نمایید و در پایان شیء حاصل را توسط توابع اجرایی روی دیتابیس اجرا نمایید و خروجی آن را (که مسلما داده است) درون صفحه به کاربرتان نمایش دهید.

در کد فوق بنده در خط آخر به کمک تابع اجرایی ToList موجب اجرای دستور SQL موجود در شیء query3 بر روی دیتابیس شده ام و در نتیجه خروجی من از نوع داده است.

نکته جالب استفاده از IQueryable این است که Where های شما با هم AND می شوند و در اصل 2 دستور زیر با هم برابرند :


var db = new MyDBContext();

var query1 = db.Employees.Where(c => c.Name == "Hamid Reza");
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
var query2 = query1.Where(c => c.Family == "Moradof");

var query3 = db.Employees.Where(c => c.Name == "Hamid Reza"
&& c.Family == "Moradof");

در کد فوق query2 و query3 با یکدیگر برابر می باشند.


حال که به اهمیت IQueryable اشاره ای داشتیم و تفاوت توابع غیر اجرایی مانند Where و OrderBy را با توابع اجرایی مانند ToList و First فرا گرفتید، بهتر است به موضوع اصلی این پست که تفاوت توابع اجرایی با یکدیگر است بپردازیم.

تابع First :
این تابع فقط در زمانی استفاده می شود که مطمئن باشید خروجی این تابع یک رکورد (یک شیء) یا بیشتر از یک رکورد می باشد ، بنابراین اگر خروجی نال باشد (هیچ رکوردی بر نگشته باشد) تابع Exception آزاد خواهد کرد.
معمولا به دلیل حساسیت بالای این تابع و امکان بروز خطا (Exception) خیلی کم از این تابع استفاده می نماییم.
دقت نمایید که این تابع معادل دستور TOP 1 در SQL می باشد و بنابراین در صورتی که خروجی شامل چندین رکورد می باشد این تابع اولین رکورد را برای ما برمی گرداند.

تابع FirstOrDefault :
این تابع همانند تابع First می باشد ، با این تفاوت که در صورتی که خروجی حاوی داده نباشد (هیچ رکوردی بر نگردد) تابع مقدار نال برمی گرداند و ارور نمی دهد.
معمولا در کدهایمان بیشتر تمایل داریم از این تابع استفاده نماییم ، به نحوی می توان گفت به دلیل عدم بروز خطا در این تابع ، این تابع بهترین تابع برای دریافت یک رکورد از دیتابیس می باشد. (در بین برنامه نویسان بیشترین کاربرد را این تابع دارد)

باید توجه داشته باشید که اضافه شدن OrDefault به اسامی توابع دلیل بر این مورد دارد که اگر خروجی تابع دارای هیچ داده (رکوردی) نباشد ، تابع مقدار پیش فرض که همانا مقدار نال (NULL) است را بر می گرداند.

نکته قابل توجه دیگر این است که از آنجایی که خروجی توابعی که درون اسم آنها عبارت OrDefault می باشد ممکن است مقدار نال باشد ، در استفاده از خروجی این توابع باید دقت نمایید و حتما قبل از استفاده از خروجی  نال نبودن خروجی را بررسی نمایید تا در زمان استفاده از آن به خطا بر نخورید
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
به تکه کد زیر توجه نمایید:

var db = new MyDBContext();

var data = db.Employees.Where(c => c.ID == 3).FirstOrDefault();

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;

در کد فوق در صورتی که من شرط if را قرار ندهم ، در زمان استفاده از شیء data جهت پر کردن لیبل ها ، در صورتی که خروجی تابع FirstOrDefault مقدار نال باشد ، شیء data حاوی مقدار نال بوده و با خطا مواجه خواهیم شد.
مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه


تابع Single :
این تابع تقریبا عملکردی مشابه تابع First دارد ، با این تفاوت که معادل دستور TOP 1 در SQL نمی باشد و بنابراین دیگر همانند تابع First در مقابل خروجی های بیش از یک رکورد ایمن نمی باشد و در این صورت خطا (Exceprion) آزاد می نماید.
به بیان دیگر می توان گفت معادل بوذن دستور First با دستور TOP 1  در SQL این قابلیت را به تابع First داده است که در صورتی که با چندین رکورد مواجه شد ، اولین رکورد آن را برگرداند و بنابراین اروری نخواهیم داشت ، ولی در تابع Single ما باید فقط و فقط یک رکورد خروجی داشته باشیم و کمتر یا بیشتر از یک خروجی موجب بروز خطا (Exceprion) در کد ما خواهد شد که اصلا با ذائقه برنامه نویسان جور نیست

بنابراین باید بسیار در استفاده از این تابع دقت نمایید تا کد شما دچار خطا نشود.
(معمولا به دلیل احتمال بالای خطا در این تابع ، از آن استفاده نمی نماییم)


تابع SingleOrDefault :
این تابع مشابه تابع Single می باشد ، با این تفاوت که در برابر عدم وجود خروجی مقاوم است و دیگر ارور نمی دهد و مقدار نال بر می گرداند ، ولی کماکان در برابر تعداد بیش از یک رکورد در خروجی ضعف دارد و خطا می دهد.
همچنین همانطور که قبلا بیان شد ، توصیه می شود قبل از استفاده از خروجی توابعی که درون اسمشان OrDefault وجود دارد ، ابتدا نال نبودن خروجی را بررسی نمایید.
به تکه کد زیر توجه نمایید :

var db = new MyDBContext();

var data = db.Employees.Where(c => c.ID == 3).SingleOrDefault();

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;

تابع ToList :
این تابع برای دریافت لیستی از رکورد ها می باشد و تعداد رکورد های خروجی اصلا برایش مهم نیست، بدین معنی که بدون خروجی ، یک رکورد و یا چندین رکورد اصلا برای آن اهمیتی ندارد و خروجی را در قالب یک کالکشن از نوع List جنریک بر می گرداند که می تواند شامل آیتم هایی باشد و یا خالی باشد.
این تابع برای دریافت لیستی از داده ها مناسب می باشد و برای دریافت یک رکورد استفاده نمی شود.

به تکه کد زیر توجه نمایید:

var db = new MyDBContext();

var data = db.Employees.Where(c => c.Family == "Moradof").ToList();
 
Repeater1.DataSource = data;
Repeater1.DataBind():

ملاحظه می نمایید که یکی از بهترین روش ها برای پر کردن کنترل های داده ای ، استفاده از تابع ToList می باشد.
مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com

تابع Find :
این تابع برای یافتن یک رکورد با کمک فیلد PrimatyKey می باشد ، تفاوت اصلی این تابع با بقیه توابع فوق این است که توابع فوق از درون دیتابیس داده را بر می گرداندند ولی این تابع از درون حافظ داده ها را بر می گرداند.
همانطور که می دانید EntityFramework یک نسخه از کل داده ها را روی حافظه کش می کند ، تابع Find در اصل درون کش EntityFramework را می گردد و داده مورد نظر را بر می گرداند.
البته بصورت دقیق نمی دانم که سیستم کش EntityFramework  به چه صورت می باشد و آیا حتما می توان انتظار داشت که همه اطلاعات دیتابیس درون کش EntityFramework  وجود داشته باشد ، ولی تا جایی که می دانم ، وقتی یک دیتایی را یکبار از طریق EntityFramework  از دیتبایس دریافت نمایید ، آن دیتا درون کش EntityFramework  قرار می گیرد.
(بررسی جزئیات دقیق تر این مورد را به خود شما می سپارم :دی )

تکه کد زیر طریقه استفاده از آن را نمایش می دهد:

var db = new MyDBContext();

var data = db.Employees.Find(c => c.ID == 3);

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;

توجه نمایید که باید حتما در ورودی تابع ، شرط مورد نظر را بر اساس ستون PrimaryKey دیتابیس بدهید.
همچنین باید توجه داشته باشید که در صورتی که خروجی یافت نشود، این تابع مقدار NULL را بر می گرداند ، بنابراین همانند توابعی که درون اسمشان عبارت OrDefault وجود داشت ، قبل از استفاده از خروحی این تابع نیز باید ابتدا نال نبودن خروجی را بررسی نمایید و سپس از خروجی آن استفاده کنید.

این تابع بین برنامه نویسان حرفه ای از محبوبیت زیادی برخوردار است و تنها ایرادش این است که فقط بر اساس ستون PrimaryKey می توان روی خروجی شرط گذاشت و برای گذاشتن سایر شروط باید از تابع Where قبل از آن استفاده نمایید.

نکته دیگر توابع اجرایی در نحوه استفاده از آنان می باشد ، همه توابع اجرایی فوق را می توانیم بصورت زیر نیز استفاده نماییم :

var db = new MyDBContext();

var data = db.Employees.FirstOrDefault(c => c.ID == 3);

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;
بصورتی که شرط فیلتر کردن خروجی را می توانیم در خود تابع وارد نماییم و دیگر نیازی به نوشتن تابع Where در قبل از آن نمی باشد ، البته استفاده از روش فوق و یا روشی که در بالای این پست بکار بردیم (همانند کد زیر) هیچ فرقی با هم ندارد و کاملا سلیقه ای می باشد.

var db = new MyDBContext();

var data = db.Employees.Where(c => c.ID == 3).FirstOrDefault();

if(data == null)
  retuen;
 
  label1.Text = data.Name;
  label2.Text = data.Family;

بنابراین این شمایید که باید تصمیم بگیرید از کدام یک از 2 کد فوق استفاده نمایید ، در عمل خروجی و کارکرد هر دو کد فوق یکسان می باشد.
خوب ، دریافت داده از EntityFramwork تقریبا نکته دیگه ای نداره ...
امیدوارم از این پست آموزشی لذت برده باشید.
خوشحال میشم اگر نظر شما در مورد این پست رو بدونم...
یا حق

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن

ارسال به 100 درجه کلوب دات کام   این مقاله رو به دوستات توی کلوب معرفی کن

    برچسب ها: آموزش نحوه دریافت داده با استفاده از Entity Framework، دریافت داده در Entity Framework، توابع اجرایی در Entity Framework، توابع پر کاربرد در Entity Framework، select در Entity Framework، 
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
نوشته شده در تاریخ پنجشنبه 22 مهر 1395    | توسط: ح.م    | طبقه بندی: آموزش Entity Framework،     | نظرات(2)
نمایش تاریخ شمسی در asp.net به کمک Extension Method

در گذشته نمایش تاریخ شمسی در asp.net یکی از چالش های بزرگ برنامه نویسان بود، اما امروزه با وجود متد های الحاقی (Extension Method) این کار به یکی از جالب ترین کارها تبدیل شده است.
قبل از پرداختن به کدها ابتدا باید با ماهیت Extension Method یا متدهای الحاقی آشنا شویم.

Extension Method یا متد الحاقی چیست ؟
متدهای الحاقی توابعی هستند که ما می توانیم از بیرون به یک کلاس اضافه نماییم.

بعنوان مثال کلاس زیر را در نظر بگیرید:


public class Person
{
  // props
  public int Id {get;set;}
  public string Name {get;set;}
  public string Family {get;set;}
 
 
  // ctor
  public Person()
  {}
 
}


فرض کنید به کدهای داخل کلاس دسترسی نداریم (مثلا یک فایل DLL داریم که کلاس فوق درون آن است و به داخل آن دسترسی نداریم و یا در گذشته یک پروژه نوشته ایم که کلاس فوق در آن استفاده شده است و با تغییر در ساختار کلاس ممکن است مشکلی در پروژه بوجود آید و ...)

برای اینکه بتوانیم یک تابع (متد) به کلاس بالا اضافه نماییم ، داریم :

public static class MyExtClass
{

  public static string GetFullName(this Person value)
  {
    retuen (value.Name + " " + value.Family);
  }
 
}

نکات مهم در متد الحاقی بالا public بودن و استاتیک بودن تابع و کلمه کلیدی this در ورودی تابع می باشد.

دقت نمایید که نام کلاسی که در ادامه کلمه کلیدی this در ورودی تابع می آید ، نشان می دهد که تابع به کدام کلاس الحاق می شود.

دقت نمایید که متدهای الحاقی باید درون یک کلاس با دسترسی public و از نوع static  قرار بگیرد.

جالبی کار در اینجاست که اگر ما یک نمونه (instance) از کلاس Person بسازیم ،به راحتی به متد الحاقی GetFullName دسترسی داریم !


Person p = new Person
{
  Id = 1 ,
  Name = "Hamid Reza",
  Family = "Moradof"
};

string fullName = p.GetFullName();


ملاحظه می نمایید که به روش فوق با راحتی توانستیم یک متد را به کلاس Person الحاق نماییم.


نکته دیگر دستور بالا استفاده نکردن از کانستراکتور و بهره گیری از قابلیت جدید سی شارپ می باشد که در آن می توان بدون نیاز به نوشتن کانستراکتور و پاس دادن اطلاعات در آن ، پراپرتی ها را درون دو عدد براکت { } بصورت درجا مقدار دهی نمود.

توضیح اینکه در گذشته برای هر کلاس دو عدد کانستراکتور می نوشتیم که یکی کانستراکتور خالی و دیگری کانستراکتوری بود که به تعداد پراپرتی ها مقدار می گرفت و آنها را درون پراپرتی ها ست می نمود.
امروزه دیگر نیاز به نوشتن کانستراکتور دوم نیست و بصورت بالا می توان خیلی راحت پراپرتی ها را مقدار دهی نمود.

مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
نمایش تاریخ شمسی در asp.net به کمک Extension Method
برای این کار فقط کافی است یک متد به کلاس DateTime دات نت اضافه  (الحاق) نماییم :

public static class ExtendedMethods
{

  public static string ToPersian(this DateTime value)
  {
    PersianCalendar pc = new PersianCalendar();

    return string.Format("{0}/{1}/{2}",
      pc.GetYear(value),
      pc.GetMonth(value).ToString(),  
      pc.GetDayOfMonth(value).ToString());
  }
 
}

بنابراین دیگه نیاز نیست که نگران نمایش تاریخ شمسی توی پروژه هاتون باشین.

فقط کافیه که :

DateTime now = DateTime.Now;

Label1.Text = now.ToPersian();

این مورد در زمان استفاده از  Entity Framework خیلی بکارتون میاد ، وقتی که می خوایم لیستی از اطلاعات رو به همراه تاریخ شمسی نمایش بدیم.

مثلا:

using(Entities en = new Entities())
{
   rptPersons.DataSource = en.Persons.ToList()
     .Select(c => new
     {
       c.Id,
       c.Name,
       c.Family,
       RegisterDate = c.RegDate.ToPersian()
     })
  
   rptPersons.DataBind();
  
}

ملاحظه می کنید که با کمک Entity Framework  و  Extension Method به چه سادگی توانستیم اطلاعات اشخاص را به همراه تاریخ عضویت آنها (بصورت شمسی) توی پروژمون نمایش بدیم.

موفق باشید.

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن

ارسال به 100 درجه کلوب دات کام   این مقاله رو به دوستات توی کلوب معرفی کن

    برچسب ها: متد الحاقی در سی شارپ، extension method در سی شارپ، آموزش extension method در سی شارپ، نمایش تاریخ شمسی در asp.net، تاریخ شمسی در asp.net، آموزش تاریخ شمسی در asp.net، 
| توسط: ح.م    | طبقه بندی: آموزش ASP.NET، آموزش Entity Framework، آموزش سی شارپ،     | 2)
استفاده از تابع foreach در entity framework در پروژه های asp.net
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
چند روز پیش یک کد دیدم که توش خیلی جالب با دستور lambda مستقیم روی خروجی دستور حرکت کرده بود و دیگه از foreachاستفاده نکرده بود،
تابع ForEach یکی از توابع خیلی جالب در entity framework است که من جدیدا باهاش افتخار آشنایی داشتم
این دستور رو توی 2 جا استفاده کردم و واقعا عالی بود (کلی کد نویسیم خلاصه شد )
استفاده از تابع ForEach در Entity framework:
همانطور که گفتم این تابع بسیار جالب در 2 جا استفاده داره:

1- در زمان ثبت یک داده در دیتابیس وقتی که می خوایم همزمان 2 جدول رو با هم پر کنیم که ارتباط یک به چند یا چند به چند دارند

فرض کنین که ما دو تا جدول با نام های Manager و NewsCat داریم که ارتباط چند به دارند.
بدین صورت که هر مدیر می تونه فقط توی موضوعاتی که براش مشخص شده خبر ارسال کنه (یه جور سیستم سطح دسترسی است)

دیاگرام دیتابیس ما این شکلیه:

مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه

در اینجا ما می خواهیم هر NewsCat جدیدی که ثبت می گردد ، همزمان درون جدول وسط نیز برای تمامی مدیران ارشد سایت نیز ثبت گردد تا بدین صورت هرگاه یکی از مدیران ارشد دسته بندی جدیدی ثبت می نماید ، دسترسی دسته بندی جدید به همه مدیران ارشد دیگر هم داده شود.

برای این کار کافی است در زمان ثبت NewsCat جدید ، به ازای هر یک از مدیران ارشد سایت یک رکورد در جدول وسط (Manager_NewsCat) ثبت نماییم تا سایر مدیران ارشد دسترسی ارسال خبر در دسته بندی جدید را داشته باشند.

برای این کار باید بصورت زیر کد بنویسیم:

// 1) Create a NewsCat Instance
NewsCat newItem =  new NewsCat { Title = txtTitle.Text };

// 2) Adding Access For All Master Admins into NewsCat Instance
en.Managers.Where(c => c.IsAdmin == true).ToList()
.ForEach(c => newItem.Manager_NewsCat
.Add(new Manager_NewsCat { Manager_Id = c.Id }));
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
// 3) add newsCat into E.F Context
en.NewsCats.AddObject(newItem);

// 4) saving all data into db
en.SaveChanges();

ابتدا باید یک Instance از کلاس NewsCat بسازیم و پراپرتی مورد نیازش را پر کنیم.

سپس روی جدول مقابل (Manager) یک foreach جالب می زنیم و به ازای تک تک مدیران ارشد (Where(c => c.IsAdmin == true یک Instance از کلاس Manager_NewsCat را به آن اضافه می نماییم.

در پایان Instance را به کانتکس E.F اضافه و همه تغییرات را ذخیره می کنیم.

کد بالا 2 نکته جالب دارد:
1- دیگه نیومدیم اطلاعات مدیران ارشد رو بگیریم و بریزیم توی یک متغیر و بعد روش Foreach سی شارپی بزنیم (دستور Foreach سی شارپ) و ...
بلکه یهو با کمک دستورات Lambda و تابع ForEach مستقیم این کار رو انجام داده ایم.

2- کل این همه رکورد رو فقط با یکبار استفاده از تابع SaveChanges انجام داده ایم ! که این یعنی همه چی رو اول روی کش داریم اضافه می کنیم و در پایان این همه رکورد رو به یکبار کانکت به به دینابیس ، در دیتابیس می ریزیم (قابل توجه دوستانی که به دنبال بهینه سازی کداشون هستند)
دقت کنین که همیشه در Entity FrameWork برای اینکه با یک بار SaveChanges بتونین اطلاعاتتونو روی توی دیتابیس ذخیره کنین ، باید از رکورد مورد نظرتون یک Instance بسازین و سپس با کمک Navigate Property ها رکورد های دیگرتونو به این Instance اضافه می کنین و در پایان Instance تونو به کانتکس E.F اضافه می کنین و سپس با یکبار اجرای تابع SaveChanges کل رکوردها رو توی دیتابیس می ریزید.
و این است قدرت Entity FrameWork
 
مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه

2- در زمانی که مثلا قراره یک رکورد رو پاک کنیم که در یک جدول دیگر کلی رکورد داریم که به این وابسته است
یکی دیگر از مواقعی که تابع ForEach عزیز رو میشه استفاده کرد ، وقتیه که مثلا من می خوان یک مدیر (Manager) رو حذف کنم و دوست هم ندارم که توی دیتابیسم رابطه بین جداولم رو Cascade کنم.

مثلا برای حذف یک مدیر داریم:

// id of deleted manager (example)
int id = 2;
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
// 1) get deleted Item
var deletedItem = en.Managers.Where(c => c.Id == id).Single();

// 2) delete all access of newsCats
en.Manager_NewsCat.Where(c => c.Manager_Id == id).ToList().ForEach(c => en.DeleteObject(c));

// 3) delete manager from context
en.DeleteObject(deletedItem);

// 4) execute all changes into db
en.SaveChanges();


با فرض اینکه آی دی مدیری که قرار حذف بشه رو داریم (نحوه بدست آوردن آی دی کسی که قرار حذف بشه خارج از بحث ماست)

به راحتی رکورد مدیر مورد نظر رو بدست میاریم و سپس با تابع Foreach و با کمک Navigate Property ها روی Manager_NewsCat های اون حرکت و همه رو از کانتکس حذف می کنیم و در پایان خود مدیر رو هم حذف می کنیم و سپس تغییرات رو روی دیتابیس اعمال می کنیم.

امیدوارم آموزش بالا خودشتون اومده باشه و از این به بعد کداتونو بهینه تر و زیباتر و کوتاه تر بنویسین
موفق باشید

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن

ارسال به 100 درجه کلوب دات کام   این مقاله رو به دوستات توی کلوب معرفی کن

    برچسب ها: استفاده از تابع foreach در entity framework در پروژه های asp.net، تابع ForEach در EntityFramework، تابع foreach در EntityFramework، تابع foreach در EntityFrame work، آموزش تابع foreach در EntityFramework، آموزش EntityFramework، اموزش entity framework، 

نوشته شده در تاریخ جمعه 19 اردیبهشت 1393    | توسط: ح.م    | طبقه بندی: آموزش Entity Framework،     | نظرات(4)
بزرگترین سوتی برنامه نویسی Entity Framework برنامه نویسان وب
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
Entity framework یکی از بهترین ORM های برای ایجاد لایه BLL پروژه های asp.net است. امروزه روز تقریبا همه برنامه نویسان کدهای ADO.Net عهد عتیق رو فراموش کرده اند و همه با Entity framework کد می زنن.
با توجه به سنگین بودن گرید ویو امروزه روز دیگه هیچکس با گریدویو کار نمی کنه و برنامه نویسان حرفه ای با رپیتر کار می کنن، یکی از مشکلات رپیتر اینه که صفحه بندی نداره و خود برنامه نویس باید یک سیستم صفحه بندی براش بنویسه. خوب شاید با خودتون بگین که مگه دیوانه ایم ، گریدوبو به اون خوبی که خودش صفحه بندی هم داره رو بذاریم کنار و بعد بیایم با رپیتر و سایر کنترل های داده ای کار کنیم که صفحه بندی نداره ! و بعدشم کلی کد واسه صفحه بندی اطلاعاتمون بزنیم!
در جواب باید خدمتتون عرض کنم که فرض کنین که تیو یک جدول 1000 تا رکورد داریم (داده) ، حال می خواهیم با گرید ویو این 1000 رکورد رو بصورت صفحه بندی و در هر صفحه 10 رکورد رو نمایش بدیم ، در این حالت سیستم صفحه بندی گرید ویو بدین صورته که اول همه 1000 تا رکورد رو از دیتابیس باید بگیریم و به گریدویو بدیم؛
بعد گریدویو فقط 10تاشو تیو صفحه نمایش میده!
البته گرید ویو اطلاعات رو کش می کنه و هر دفعه نیاز نیست که با هر بار PostBack شدن صفحه ، اطلاعات رو مجدد از دیتابیس بگیریم و بهش بدیم، ولی با این حال هنوز مشکل دریافت 1000 رکورد از دیتابیس و تحویل اون به گرید ویو به قوت خودش باقی است.
حال فرض کنین که سایت شما روزی 10000 تا بازدید کننده داشته باشه، هر بازدید کننده مگر چند تا صفحه از مطالب شما رو می خونه ؟
آیا نیازه که واسه هر بازدید کننده 1000 تا رکورد از دیتبایس دریافت بشه ؟ در حالی که شاید نهایتا بازدید کننده 2-3 صفحه اول مطالب رو بخونه ؟
این مشکل باعث رد و بدن شدن حجم بالایی از اطلاعات بین وب سرور و SQL سرور میشه که زیاد حرفه ای به نظر نمیرسه!

بدین دلیل است که برنامه نویسان حرفه ای و اونایی که به بهینه بودن کدهاشون و سرعت سایت هاشون اهمیت میدن، روش استفاده از پروسیجر رو پیش گرفتند.
بدین صورت که شما یک پروسیجر می نویسین که 2 تا ورودی می گیره:
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
    شماره صفحه
    تعداد رکوردهایی که می خواین توی هر صفحه نمایش بدین

این پروسیجر کارش اینه که فقط به تعدادی که نیاز داریم رکورد از دیتابیس بگیره و تحویل رپیتر بده.

بدین صورت که اگر من بهش عدد 2 و 10 رو به ترتیب بدم، پروسیجر 10 تا رکورد دوم رو بهم میده (یعنی 10 تا رکورد اول رو بی خیال میشه و 10 تای بعدی رو به من میده) و اگر مقدار 5 و 10 رو بدم ، 10 تا رکورد پنجم رو بهم میده (یعنی 40 تا رکورد اول رو بی خیال میشه و 10 تای بعدیش رو به من میده)

بدین ترتیب شما همیشه فقط و فقط به مقدار اطلاعاتی که نیاز داریم از دیتابیس دیتا می گیرین.
شروع عرصه Entity framework :

با شروع همه گیر شدن Entity framework برنامه نویسان دیگه کم کم پروسیجر رو فراموش کردند و تقریبا همه کدهایی که یک زمانی باید براشون پروسیجر می نوشتیم و کلی کد سی شارپ هم براش می نوشتیم تا بتونیم از اون پروسیجر ها استفاده کنیم، خدا بیامرز شدن و همه اون همه کد با یک خط کد ساده بوسیله Entity framework انجام میشه
صفحه بندی اطلاعات در Entity framework با کمک دو دستور ()Skip و ()Take انجام میشه.

حال یکی از سوتی هایی برنامه نوییسان در حین کار با این دستورات میدن اینه که دستورات خودشونو بصورت زیر می نویسن:

var list =
en.News.OrderByDescending(c => c.Id).ToList().Skip(1).Take(2);

کد سی شارپ بالا که با دستورات Lambda نوشته شده(1)  در دید اول ممکنه به نظر درست بیاد، در این کد من خبرهای دو تا مونده به آخری رو از دیتابیس دریافت کرده ام ؛ بدین صورت که ابتدا خبر ها رو از آخر به اول چینش کرده ام و سپس اولین خبر بالای لیست رو بی خیال شده ام (از روش پریده ام) و 2 خبر بعدیش رو دریافت کرده ام.

مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه

اگر دستور SQL ای که با اجرای کد بالا روی دیتابیس اجرا میشه رو با نرم افزار SQL Profiler مشاهده کنیم ، می بینیم که چنین کدی روی دیتابیس اجرا میشه:

SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
FROM [dbo].[News] AS [Extent1]
ORDER BY [Extent1].[Id] DESC
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
ملاحظه می کنین که در اصل ما همه رکوردها رو داریم از دیتابیس می گیریم و بعد توس سمت سی شارپ (وب سرور) داریم 2 تاشو جدا می کنیم و این یعنی اینکه ما داریم سر خودمونو کلاه میزاریم و در اصل همه رکوردها داره از دیتابیس دریافت میشه که این اصلا بهینه نیست !

روش صحیح کد نویسی برای صفحه بندی ، بدین صورته:

var list =
en.News.OrderByDescending(c => c.Id).Skip(1).Take(2).ToList();

با اجرای این کد ، دستور زیر بروی دیتابیس اجرا می شود:

SELECT TOP (2)
[Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
FROM ( SELECT [Extent1].[Id] AS [Id],
      [Extent1].[Title] AS [Title],
      row_number()
      OVER (ORDER BY [Extent1].[Id] DESC) AS [row_number]
      FROM [dbo].[News] AS [Extent1]
) AS [Extent1]
WHERE [Extent1].[row_number] > 1
ORDER BY [Extent1].[Id] DESC

ملاحظه می کنین که دقیقا 2 رکورد مورد نظر از دیتابیس دریافت شده است.
نکته مهمی که از این آزمایش می توان نتیجه گرفت این است که همیشه اول Skip  و Take رو بنویسین و بعد دستور ToList رو بنویسین.
این نکته ممکنه خیلی ساده به نظر بیاد ، ولی توی سرعت پروژتون خیلی تاثیر داره.
وقتی کدای یک پروژه رو بررسی می کردم به این نکته پی بردم، برای همین اینجا نوشتم که همه بهره ببرند.
موفق باشید.

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن

ارسال به 100 درجه کلوب دات کام   این مقاله رو به دوستات توی کلوب معرفی کن

    برچسب ها: بزرگترین سوتی برنامه نویسی Entity Framework برنامه نویسان وب، نکته مهم entity frame work، آموزش entity frame work، استفاده از skip و take در entity framework، صفحه بندی در entity framework، صفحه بندی اطلاعات در entity framework، صفحه بندی در entityframework، 

| توسط: ح.م    | طبقه بندی: آموزش Entity Framework،     |
nHibernate یا EntityFramework مسئله این است!
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
با سلام.
در پروژه های نرم افزاری ، کار با اطلاعات موجود در دیتابیس بخش اصلی پروژه رو تشکیل میده و حدود 30 تا 40 درصد زمان پروژه ها نیز صرف نوشتن کدهای این بخش می شود، حال آنکه بخش اعشم این کدها یک روال تکراری را دنبال می کنند (همانند نوشتن یک سری کلاس که دارای یک سری پراپرتی می باشند و نوشتن متدهای معروف   Select-Add-Update-Delete و ...)
حال آنکه یک ORM می تواند همه این کدهای زمان بر و خسته کننده را به راحتی و بصورت خیلی بهینه و تمیز برای شما بنویسند

nHibernate و Entityframework دو عدد ORM بسیار معروف هستند که اولی بصورت سورس باز می باشد و دومی متعلق به شرکت مایکزوسافت است.

nHibernamte بسیار قدیمی تر از  Entityframework است و چندین سال قبل از بوجود آمدن Entityframework بوجود آمده است و برنامه نویسان قدیمی اکثرا با این ORM کار می کردند و لایه های DataAccess خود را با آن می نوشتند ...

کار کردن با nHibernate نیاز به تجربه و علم بیشتری دارد و یکم سخت تر هم هست ولی کار با Entityframework بسیار راحت است ، بطوری که بچه 5 ساله هم می تونه باهاش کار کنه!

حال برخی به NH اعتقاد دارند و برخی به EF و همیشه سر این دو گروه جنگ و دعوای بسیار بوده است ...

در اینجا دو آدرس جهت دوستان معرفی می گردد که خواندنش می تونه جواب بسیاری از سوالات شما را بدهد :

    کامنت جناب نصیری در سایت دات نت تیپس درباره مزایای EF نسبت به NH
    مقاله مقایسه ای یکی از برنامه نویسان با تجربه در این زمینه

باز اگر لینک خوبی پیدا کردم ؛ توی همین پست قرار میدم ....

دوستان توجه داشته باشند که من از خودم هیچی نگفتم ، چون با NH کار نکردم که بتونم نظر خودم رو بگم و دو لینکی که گذاشتم از دو شخص با تجربه است که هر دو با EF و NH کار کرده اند

یا حق

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com

    برچسب ها: NH یا EF ؟، nhibernate یا entityframework، فرق nhibernate و entityframework، تفاوت بین nhibernate یا entityframework، کدام بهتر است ؟ nhibernate یا entityframework، 

نوشته شده در تاریخ دوشنبه 21 بهمن 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET، آموزش Entity Framework،     | نظرات(3)
آموزش کامل انواع روش های واکشی اطلاعات در سی شارپ و asp.net - بخش سوم

در آموزش های قبلی برخی روش های دریافت اطلاعات از دیتابیس و نمایش اون در صفحات رو آموزش دادم.
امروز می خوام  روش های دیگر دریافت اطلاعات از دیتابیس (ado.net) رو آموزش بدم.

3- با استفاده از Entity Framework عزیز دلم

البته به زودی یک تالار مخصوص Entity Framework باز می کنم و بصورت کامل کامل این تکنولوژی عزیز و دوست داشتنیمو آموزش میدم.


در این روش ابتدا شما باید Add New Item بزنین و بعد یک فایل از نوع ADO.Net Entity Data Model به پروژتون اضافه می کنین و اون رو روی دیتابیستون تنظیم می کنین و Next میزنین تا آخر.
(اول کانشکن جهت اتصال به دیتابیس رو می گیره و بعد لیست تمامی جداول و پروسیجر های دیتبایستون رو میاره که همه رو تیک میزنین و تمام)

* دریافت یه عالمه دیتا (چندین سطر) از دیتابیس:

با فرض اینکه من مدلم رو با نام MyModel ساخته ام و entity خودمو هم با نام MyEntities ساخته ام، داریم:

ابتدا مدلم رو به صفحه ام اضافه می کنم:
using MyModel;

سپس در رویداد لود داریم :
using (MyEntities en = new MyEntities())
{
  GridView1.DataSource = en.Members;
  GridView1.DataBind();
}

با توجه به حجم کم کدهای من ، فکر می کنم دلیل علاقه شدید بنده رو درک کرده باشید


* دریافت یک رکورد (یک سطر) از دیتابیس:
using (MyEntities en = new MyEntities())
{
  GridView1.DataSource = en.Members.Where(c => c.Id == 2);
  GridView1.DataBind();
}

شایان ذکر است که کدهای Entity Framework رو به دو صورت میشه نوشت :

1- با دستورات LINQ
2- با دستورات Lambda
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
در بالا من به روش لامبدا نوشتم.
این روش هم کوتاه تره و هم باحال تره و هم اینکه وقتی شما با LINQ دستورات رو بنویسین ، در زمان اجرا این دستوران به زیان لامبدا تبدیل و سپس اجرا میشن ، پس اگر لامبدا کد بزنین هم جذاب تره و هم اینکه یک مرحله کار اجرا جلو می افته و مسلما سرعت اجرای دستوراتتون بالاتر میره.


* دریافت یه مقدار واحد از دیتابیس:
using (MyEntities en = new MyEntities())
{
  // روش اول
  Label1.Text = en.Members.Where(c => c.Id == 2).Select(x => x.Name).Single();
           
  // روش دوم
  Label1.Text = en.Members.Where(c => c.Id == 2).Single().Name;

}

برای دریافت یک مقدار واحد 2 تا راه داریم که در بالا هر دو رو نوشته ام.

در روش اول من پروپرتی مورد نظر رو فقط از دیتابیس گرفته ام؛ این دستور موجب اجرای دستور SQL ای "SELECT Name FROM Members" رو دیتابیس میشه

در روش دوم من همه پروپرتی ها رو از دیتابیس گرفته ام و بعد فقط از Name اون استفاده کرده ام؛ این دستور موجب اجرای دستور SQL ای "SELECT * FROM Members" رو دیتابیس میشه

مسلما روش اول بهینه تره.

امیدوارم که از سری آموزش های روش های واکشی اطلاعات از دیتابیس من خوشتون اومده باشه
سری کامل مقالات آموزش ado.net رو می تونین از اینجا مشاهده نمایید.

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن



    برچسب ها: آموزش ado.net، دریافت اطلاعات از دیتابیس، دریافت اطلاعات از دیتابیس sql، آموزش entity framework، مثال آموزش entity framework، نمونه کد entity framework، 

نوشته شده در تاریخ شنبه 27 مهر 1392    | توسط: ح.م    | طبقه بندی: آموزش ado.net، آموزش Entity Framework، آموزش ASP.NET،     | نظرات(1)
آموزش کامل انواع روش های واکشی اطلاعات در سی شارپ و asp.net - بخش اول

چه در برنامه های تحت ویندوز و چه در برنامه های تحت وب ، برای واکشی اطلاعات از دیتابیس یک سری روش ها مشخص وجود دارد.

در مقالات قبلی کمی با ado.net آشنا شدیم ، امروز می خوام بصورت کامل و مفصل با انواع روش های دریافت اطلاعات از دیتابیس و نمایش اون درون سایت آشنا بشیم.


این روش ها عبارتند از:

    استفاده از کنترل SqlDataSource : این روش به دلیل اینکه خطاها رو اصلا نمیشه کنترل کرد ، فقط در پروژه های دانشجویی کاربرد داره.
    کد نویسی دستی (ADO.Net) : این روش خود به چند روش قابل انجامه:
        SqlDataReader
        SqlAdapter و DataTable
        Scalar
    با کمک عزیز دل خودم یعنی Entity Framework

 شما را با تمامی این روش ها آشنا می کنم و کلی مثال براتون میزارم که کاملا با کدنویسی هر روش آشنا بشید.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن



آموزش کامل انواع روش های واکشی اطلاعات در سی شارپ و asp.net، واکشی اطلاعات از دیتابیس در Asp.net، واکشی اطلاعات از دیتابیس در سی شارپ، آموزش ado.net، آموزش entity framework، 

نوشته شده در تاریخ جمعه 14 تیر 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET، آموزش ado.net، آموزش Entity Framework،     | نظرات(1)
آموزش رفع ارور مهلک the ObjectContext instance has been disposed and can no longer be used for operations that require a connection در entity framework

آموزش رفع ارور مهلک the ObjectContext instance has been disposed and can no longer be used for operations that require a connection در entity framework


دوستانی که با تکنولوژی حرکن می کنن و الان دارن با Entity Framework کد میزنن ، خیلی از مواقع ممکنه که با همچین اروری برخورد کنن.
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
در توضیح باید خدمتتون عرض کنم که بنده 2 روزه دارم با این ارور سرو کله میزنم که طبق چیزی که بنده متوجه شدم ، این ارور موقعی رخ میده که شما یک کد linq روی entity framework تون نوشتین که در خروجیش لیستی از اشیاء رو دارین از دیتابیس دریافت می کنین.

حال اگر بخواهید روی خروجی یک تابعی مثل skip رو اجرا کنین ، از اونجایی که در entity framework تا وقتی که از متغیر خروجی دستورتون استفاده نکنین ، چیزی از دیتابیس دریافت نمیشه ، entity framework بیچاره نمی تونه روی یک متغیر null بیاد و تابعی مثل skip رو اجرا کنه و بنابراین ارور مهلک بالا رو بهتون نمایش میده.

به بیان ساده تر ، در  تا وقتی که خروجی دستور Linq تونو داخل یک کنترل داده ای نریزید و یا با forearch روی خروجی حرکت نکنین ، هیچ اتصالی به دیتابیس انجام نمی پذیره و مسلما از اونجایی که خروجی دستور linkq تون رو که داخل یک متغیر var ریختین ، متغیرتون کاملا خالیه (null).

حالا اینکه شما انتظار دارید که بیاد و روی هیچی (یک متغیر null) یک تابعی رو اجرا کنه ، یک خواست نادرستیه و entity framework درخواست نابجای شما رو با ارور مهلک the ObjectContext instance has been disposed and can no longer be used for operations that require a connection  پاسخ میده.

تا شما باشین درخواست نابجا نکنین :)
سایت نت نیک

رفع ارور مهلک the ObjectContext instance has been disposed and can no longer be used for operations that require a connection در entity framework:

رفع خطا بسیار ساده است ، در entity framework توابعی وجود دارد که موجب می شوند که بلافاصله پس از اجرای این توابع ، اتصال به دیتابیس صورت گیرد و اطلاعات مورد نظر از دیتابیس دریافت گردد.
دستور ()ToList یکی از این توابع است.

کافی است شما قبل از استفاد هاز توابعی مانند skip از این تابع استفاده نمایید تا بلافاصله اطلاعات از دیتابیس دریافت بشه و entity framework بتونه تابع مورد نظر شما رو روی خروجی دیتابیس اجرا کنه.

البته این چیزیه که من بهش رسیدم و ممکنه 100% کامل و درست نباشه ؛
ولی از اونجایی که در این سایت من دارم تجربیات و مطالبی که خودم در حین برنامه نویسی می فهمم رو آموزش میدم ، این امر کاملا طبیعی است که برخی مطالب کامل نباشند.
خوب مشکل من که با این روش حل شد :)
خوب به همین سادگی ، تا آموزشی دگر بدرود

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azs





:: موضوعات مرتبط: proje new er sql , ,
:: بازدید از این مطلب : 336
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : چهار شنبه 23 مرداد 1398 | نظرات ()
مطالب مرتبط با این پست
لیست
می توانید دیدگاه خود را بنویسید


نام
آدرس ایمیل
وب سایت/بلاگ
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

آپلود عکس دلخواه: